using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FiltronASP.Models.Validators;

namespace FiltronASP.Models
{
    /// <summary>
    /// Fragment klasy odpowiadajacy tabeli <code>MenuItems</code>.
    /// </summary>
    [MetadataType(typeof(MenuItemValidation))]
    public partial class MenuItem
    {
    }

    /// <summary>
    /// Klasa z walidacja dla niektorych danych klasy <code>MenuItems</code>.
    /// </summary>
    public class MenuItemValidation
    {

        [HiddenInput(DisplayValue = false)]
        public int item_id { get; set; }

        [Required(ErrorMessage = "Nazwa pozycji menu jest wymagana.")]
        [StringLength(190, ErrorMessage = "Nazwa pozycji menu nie powinna być dłuższa niż 190 znaków.")]
        public string item_name { get; set; }

        [Required(ErrorMessage = "Alias pozycji menu jest wymagany.")]
        [StringLength(190, ErrorMessage = "Alias pozycji menu nie powinien być dłuższy niż 190 znaków.")]
        public string item_alias { get; set; }

        [Required(ErrorMessage = "Informacja na temat numeru porządkowego pozycji menu jest wymagana.")]
        [NotNegativeNumber(ErrorMessage = "Wprowadzona wartość powinna być nieujemna.")]
        public int item_ordering { get; set; }

        [Required(ErrorMessage = "Informacja na temat publikacji pozycji menu jest wymagana.")]
        public bool item_published { get; set; }

        [Required(ErrorMessage = "Link do pozycji menu jest wymagany.")]
        [StringLength(190, ErrorMessage = "Link pozycji menu nie powinien być dłuższy niż 190 znaków.")]
	    [Http(ErrorMessage = "Link pozycji menu nie wygląda na poprawny. Proszę upewnić się, czy zaczyna się od http:// lub https:// oraz czy nie zawiera zabronionych znaków. ")]
        public string item_link { get; set; }

        [Required(ErrorMessage = "Informacja na temat możliwości edycji pozycji menu jest wymagana.")]
        public bool item_editable { get; set; }

        [Required(ErrorMessage = "Informacja na temat możliwości usuwania pozycji menu jest wymagana.")]
        public bool item_removable { get; set; }

        [Required(ErrorMessage = "Informacja na klucza menu nadrzędnego dla pozycji menu jest wymagana.")]
        public int menu_id { get; set; }

        [Required(ErrorMessage = "Informacja na temat typu pozycji menu jest wymagana.")]
        public Nullable<int> item_type_id { get; set; }

        [Required(ErrorMessage = "Informacja na temat poziomu zagłębienia pozycji menu jest wymagana.")]
        public Nullable<int> item_depth { get; set; }

    }
}
